const { Op } = require('sequelize')

const Cart = require('../model/cart.model')
const Goods = require('../model/goods.model')


class CartService {
    //创建或更新购物车
    async createOrUpdate(user_id, goods_id) {
        //根据user_id和goods_id同时查找查询购物车中是否已经存在该商品
        let res=await Cart.findOne({
            where:{
                [Op.and]:[
                    {user_id},
                    {goods_id}
                ]
            }
        })
        if(res){
            //购物车中已经存在该商品，更新商品数量将number加1
            await res.increment('number')
            return await res.reload() //返回更新后的结果
        }else{
            //购物车中不存在该商品，创建新的购物车记录
            return await Cart.create({
                user_id,
                goods_id
            })
           }

      
    }

    //获取购物车列表
    async findCarts(pageNum,pageSize) {
        const offset=(pageNum-1)*pageSize //计算偏移量
        const limit=pageSize*1 //每页显示的数量
        const {cout,rows}=await Cart.findAndCountAll({
            // attributes:['id','number','selected'], //查询的字段
            offset,
            limit,
            include:{
                model:Goods, //关联查询商品表
                as:'goods_info', //别名
                attributes:['id','goods_name','goods_price','goods_img'] //查询的字段
            }
        
        }) //查询购物车列表
        return {
            pageNum,
            pageSize,
            total:cout,
            list:rows
        }
         
    }

    //更新购物车
    async updateCarts(params){
        const {id,number,selected}=params  //解构参数
        const res= await Cart.findByPk(id) //根据id查找购物车
        if(!res) return  ''  //如果购物车不存在
        if(number!==undefined){ //如果number不为空
            res.number=number //更新number
        }
        if(selected!==undefined){ //如果selected不为空
            res.selected=selected //更新selected
        }
        await res.save() //保存更新后的结果
        return res //返回更新后的结果
    }

    //删除购物车
    async removeCarts(ids) {
        //删除购物车
        const res=await Cart.destroy({
            where:{
                id:{
                    [Op.in]:ids //根据id批量删除购物车
                }
            }
        })
        return res
    }

    //全选
    async selectAllCarts(user_id) {
        //更新购物车
        const res=await Cart.update({
            selected:true
        },{
            where:{
                user_id
            }
        })
        return res

    }
    //全不选
    async unselectAllCarts(user_id) {
        //更新购物车
        const res=await Cart.update({
            selected:false
        },{
            where:{
                user_id
            }
        })
        return res
    }
}

module.exports = new CartService();